#include "singletonbd.h"
//静态成员初始化  数据类型  类名::静态成员=值；
SingletonBD *SingletonBD::db=nullptr;

//公有静态函数 提供单例--全局访问点
SingletonBD *SingletonBD::getInstance()
{
    if(SingletonBD::db==nullptr)
    {   //懒汉模式          饿汉模式
        qDebug() << "first time create Instance";
        SingletonBD::db = new SingletonBD;
    }
    else {
        qDebug() << "2-n time";
    }
    return SingletonBD::db;
}

void SingletonBD::closedb()
{
    sqlite3_close(this->pdb);
    this->pdb = nullptr;
    SingletonBD::db = nullptr;//避免野指针
}

/** 查询语句
 * @brief doSelect
 * @param sql   执行的sql
 * @param qres  结果集引用
 * @param row   数据行引用
 * @param col   数据列引用
 * @return      0--sql执行成功 else执行失败
 */
int SingletonBD::doSelect(QString sql, char **&qres, int &row, int &col)
{
    char *errmsg = nullptr;
    int res = sqlite3_get_table(this->pdb, sql.toUtf8(), &qres, &row, &col, &errmsg);
    if(res != SQLITE_OK)
    {
        qDebug() << sqlite3_errcode(this->pdb);
        qDebug() << sqlite3_errmsg(this->pdb);
    }
    return res;
}

int SingletonBD::doUpdateInsertDel(QString sql)
{
    char **errmsg = nullptr;
    qDebug () <<"doUpdateInsertDel sql ="<< sql.toUtf8();
    qDebug () <<"doUpdateInsertDel sql ="<< this->pdb;
    int res = sqlite3_exec(this->pdb, sql.toUtf8(), nullptr, nullptr, errmsg);

//    qDebug() << "bbbbbbbbbb";
    if(res != SQLITE_OK)
    {
        qDebug() << sqlite3_errcode(this->pdb);
        qDebug() << sqlite3_errmsg(this->pdb);
    }
    return res;
}

SingletonBD::SingletonBD()
{
    //数据库不存在就创建，存在则打开
    int res = sqlite3_open("database.db", &this->pdb);

    if(res==SQLITE_OK)
    {
        qDebug()<< "打开数据库成功--新建";
    }
    else {
        qDebug() << "数据库打开失败" ;
    }
}
